package ar.republicagroup.gestion.services.impl;

import ar.republicagroup.gestion.dao.CierreCajaDAO;
import ar.republicagroup.gestion.entities.CalendarioBancario;
import ar.republicagroup.gestion.entities.CierreCaja;
import ar.republicagroup.gestion.services.CalendarioBancarioServices;
import ar.republicagroup.gestion.services.CierreCajaServices;
import ar.republicagroup.gestion.util.SpringUtils;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author DIEGOALV
 */
public class CierreCajaServicesImpl implements CierreCajaServices {

    private CierreCajaDAO cierreCajaDao;
    
    public void setCierreCajaDao(CierreCajaDAO cierreCajaDao) {
        this.cierreCajaDao = cierreCajaDao;
    }
    
    @Override
    public String insert(CierreCaja beanCierreCaja) {
        return cierreCajaDao.insert(beanCierreCaja);
    }

    @Override
    public String update(CierreCaja beanCierreCaja) {
        return cierreCajaDao.update(beanCierreCaja);
    }

    @Override
    public CierreCaja get(Integer idcierreCaja) {
        return cierreCajaDao.get(idcierreCaja);
    }

    @Override
    public String delete(Integer idcierreCaja) {
        return cierreCajaDao.delete(idcierreCaja);
    }

    @Override
    public CierreCaja getCierreCajaByFecha(Calendar fechaCaja) {
        return cierreCajaDao.getCierreCajaByFecha(fechaCaja);
    }

    @Override
    public boolean isCierreCajaClosed(Calendar fechaCierre) {
        
        if( isTodayIsHoliday() ){
            return true;
        }
        
        CierreCaja cierreCaja = cierreCajaDao.getCierreCajaByFecha(fechaCierre);
        
        if( cierreCaja != null){
            return true;
        }
        
        return false;
      
    }

    /**
     * Validamos si hoy es feriado según el CalendarioBancario
     * @return true si es feriado, sino false
     */
    private boolean isTodayIsHoliday(){
    
        Set<CalendarioBancario> calendarioSet = new HashSet<>();
        CalendarioBancarioServices calendarioBancarioServices = (CalendarioBancarioServices)SpringUtils.getBean("calendarioBancarioServices");
        calendarioSet = calendarioBancarioServices.findEntities();   
        boolean isHoliday = calendarioBancarioServices.isHoliday(new Date(), calendarioSet);
        return isHoliday;
        
    }
    
}
